package com.example.examsystem.service;

import com.example.examsystem.common.PageResponse;
import com.example.examsystem.dto.QuestionImportDto;
import com.example.examsystem.model.QuestionImport;
import com.example.examsystem.repository.QuestionImportRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 试题导入服务接口
 * 实现试题导入相关的业务逻辑
 */
@Slf4j
@RequiredArgsConstructor
@Service
public class QuestionImportService {

    private final QuestionImportRepository questionImportRepository;

    /**
     * 获取导入历史记录列表
     * @param page 页码
     * @param size 数量
     * @param fileName 文件名
     * @return 导入历史记录列表
     */
    public PageResponse<QuestionImportDto> getImportHistory(int page, int size, String fileName) {
        Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));

        // 根据查询参数获取分页数据
        Page<QuestionImport> importPage = questionImportRepository.findByFileNameContaining(
                fileName == null ? "" : fileName, pageable);
        
        // 将实体转换为DTO
        List<QuestionImportDto> content = importPage.getContent().stream()
                .map(this::convertToDto)
                .collect(Collectors.toList());
        
        // 返回分页响应
        return new PageResponse<>(
                content,
                importPage.getNumber(),
                importPage.getSize(),
                importPage.getTotalElements(),
                importPage.getTotalPages()
        );
    }

    /**
     * 根据ID获取单个导入记录
     * @param id 导入记录ID
     * @return 导入记录详情
     */
    public QuestionImportDto getImportRecord(Long id) {
        QuestionImport questionImport = questionImportRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Import record not found"));
        return convertToDto(questionImport);
    }

    /**
     * 下载导入错误文件
     * @param id 导入记录ID
     * @return 错误文件资源
     */
    public Resource downloadErrorFile(Long id) {
        // TODO: 实现下载错误文件逻辑
        return null;
    }

    /**
     * 将QuestionImport实体转换为ImportRecord DTO
     * @param entity QuestionImport实体
     * @return ImportRecord DTO
     */
    private QuestionImportDto convertToDto(QuestionImport entity) {
        QuestionImportDto dto = new QuestionImportDto();
        dto.setId(entity.getId());
        dto.setFileName(entity.getFileName());
        dto.setFileSize(entity.getFileSize());
        dto.setTotalCount(entity.getTotalCount());
        dto.setSuccessCount(entity.getSuccessCount());
        dto.setFailCount(entity.getFailCount());
        dto.setStatus(entity.getStatus());
        dto.setErrorMessage(entity.getErrorMessage());
        dto.setErrorFilePath(entity.getErrorFilePath());
        dto.setImportType(entity.getImportType());
        dto.setCreatedAt(entity.getCreatedAt());
        dto.setUpdatedAt(entity.getUpdatedAt());
        return dto;
    }
}